//弱引用   深拷贝使用 WeakMap 主要是为了避免循环引用导致的无限递归问题，
// WeakMap 以对象作为键，其键是弱引用，当对象其他引用被释放后，WeakMap 
// 里对应的键值对会自动被垃圾回收，能有效管理内存并正确处理循环引用情况。
function clone(target, map = new WeakMap()) {
    if (typeof target === 'object') {
        const isArray = Array.isArray(target);
        let cloneTarget = isArray ? [] : {};

        if (map.get(target)) {
            return map.get(target);
        }
        map.set(target, cloneTarget);
       //性能优化
        const keys = isArray ? undefined : Object.keys(target);
        //性能提升
        forEach(keys || target, (value, key) => {
            if (keys) {
                key = value;
            }
            cloneTarget[key] = clone2(target[key], map);
        });

        return cloneTarget;
    } else {
        return target;
    }
}